6.2 switch文の重複
switch文は悪魔を非常に呼び寄せやすい制御構文 (p.160)
if elif elif ... elseでもmatch caseでもswitch文と同様の悪魔は呼び寄せうる
switchは6.1で紹介された早期returnは使えない
enum MagicType
メソッドごとにMagicTypeで分岐する条件分岐(switch文)を書く
switch文が重複(増殖)する結果に
switch文クローン問題
(テストコードないのかな。ユーザーからのクレームに至る前に気づければまだよさそう)
単一責任選択の原則(6.2.5)
『オブジェクト指向入門 第2版 原則・コンセプト』
端的に言うと、同じ条件式の条件分岐を複数書かず、一箇所にまとめよう、とする原則です (p.170)
switch文を1箇所にまとめた
インターフェースの使用(6.2.6)
1箇所にまとめたswitch文のロジックが膨れ上がる → クラス分割
interfaceは異なる型を同じ型として利用できるようにするもの (pp.174-175)
Shapeインターフェースを実装したRectangleクラス、Circleクラス
Shape型の変数に、RectangleとCircle両方の型のインスタンスを代入できる (p.176)
Pythonの型ヒントでも同様?(要検証)
機能切り替えが簡単になる
ストラテジパターン(6.2.7)
interfaceを用いて処理を切り替える
種類ごとに切り替えたい機能をinterfaceのメソッドとして定義する (p.178)
各魔法は個別のクラス
各クラスはMagic interfaceを実装
Magic interfaceは種類ごとに切り替えたい機能(=魔法関連の処理)を抽象化(図6.3)
個別クラスの実装を知らなくても、Magic interfaceの使い方だけ知っていれば使える
switchの代わりにMapで切り替える (p.184)
interfaceの目的や効果(条件分岐の削減)が理解され、実際に広く活用されているとは言えないのではないでしょうか。(p.196)